查看原文
其他

老树开花,一例新上传的KimSuky老样本分析

顾何 看雪学苑 2022-07-01

本文为看雪论坛优秀文章

看雪论坛作者ID:顾何





0x00 前言


这个样本是之前在Twitter看到的,报告写好了一直没发,后来创宇的老哥先发了,但是跟我分析的角度不同,所以在这里分享一下我对这个样本的分析思路。

首先,KimSuky最早应该是由卡巴披露的朝鲜背景的APT组织,最早发布于13年,至今已经连续活跃了7年左右了。
kimsuky APT组织(又名Mystery Baby, Baby Coin, Smoke Screen, BabyShark, Cobra Venom) ,该组织一直针对于韩国的智囊团,政府组织,新闻组织,大学教授等等进行活动。并且该组织拥有windows平台的攻击能力,载荷便捷,阶段繁多,还十分活跃,其载荷有带有漏洞的hwp文件,恶意宏文件,释放载荷的PE文件等(这部分都是网上有的,我直接抄的 哈哈)

笔者在日常的Twitter情报收集的时候,发现了这样一个带有KimSuky标签的恶意样本:

在VT查一下样本可以发现这看起来是一个"新样本"。2020年8月13编译,9月2日被上传到VT。





0x01 样本分析


样本下载到本地使用IDA加载,通过Start函数可知这是一个由VC系编译器编译的样本。

直接来到WinMain分析一下样本的代码。
这里可以看到,程序进到winMain之后,首先是call了sub_404140,急着是通过LoadLibrary和GetProcAddress获取了一些API的地址。特别是在后面,程序还调用了FindResourceA和SizeofResource这种操作资源的API。

所以我们可以顺便查看一下样本的资源信息:

这里可以看到,样本有一个名为JUYFON的资源名。

以这个资源的数据作为条件去VT搜索可以找到一个同类样本:
回到IDA中,我们看下第一个call做了什么,关于资源,等下调一下就知道到底解出来是什么了。

sub_404140的功能很简单,就是LoadLibrary kernel32,然后获取了一些API的地址。
后面的第二个call sub_4041D0也是同理,不过这个call里面获取的是网络请求相关的一些API。

这两个函数执行完之后,程序会通过FindResource去找到刚才我们看到的名为JUYFON的资源:
如果找到了资源资源,则计算资源的大小,然后跳转到后面去进行解密:
解密的算法还有点点长,我们等下直接去调试器中调试一下即可。

先静态往下看看。

资源解密了之后,看起来像是要删除原始文件,然后创建从资源解密出来的文件,通过ShellExecute函数的open打开释放的文件,最后CreateThread加载到新线程中。这样看来,资源解密出来的文件应该是一个忧郁诱惑用户的文件:
于是我们来调试器里面看一下。

解出来之后,发现是一个PK压缩包:
然后将这个文件写入到%temp%目录下:
但是这里可以看到,程序是在在temp目录下释放了一个docx文件。这里的文件名由于操作系统的原因导致乱码显示了。
这里通过ShellExecute函数open打开了刚才释放的docx文件,然后通过CreateThread函数跳转到新线程去执行。
所以样本外层的功能就是,读取资源解密得到一个docx,打开这个docx迷惑用户,然后跳转到新线程执行后面的功能。

释放的docx文档内容如下:
翻译一下可以得到如下的内容:
根据邮件内容,基本上可以确定这是针对韩国庆熙大学的攻击,比较符合KimSuky的攻击目标。




0x02 新线程分析


我们来到新线程的代码:
新线程进来,程序首先是通过SHGetSpecialFolderPathA获取了csid为26的系统路径,即:

C:/Documents and Settings/当前用户/Application Data。

获取%appdata%环境路径之后,程序会尝试将\\Microsoft\\HNC拼接到获取到的路径之后形成一个新的路径:
然后有两个call需要调试器里面看一下:
第一个是CreateDirectory。

这里是创建刚才拼接好的路径:
第二个call是GetShortPathName,这里是获取刚才路径的短路径:
接下来格式化得到一个新的路径,这里看样子后续又会生成一个wcl.docx:
此外还会在格式化出一个在这个路径下的tcf.bin的路径:
然后call sub_404250进入到4250函数。

00404250


4250函数进来首先会通过memset清空一些内存。

然后通过GetEnvironmentVariableA获取COMSPEC这个环境变量路径,也就是cmd.exe的路径。

这里可以看到,获取之后,应该是会在后面open打开cmd执行一些后续的操作:
成功获取到cmd的路径之后,程序这里应该是通过SHGetSpecialFolderPathA获取当前用户的桌面路径。看样子会执行cmd指令,获取盘符信息并且写入过去。
然后通过格式化,拼接出一个完整的执行语句,这里是获取桌面的所有文件路径然后写入到wcl.docx文档中:
写入之后的信息如下:
接着又获取Recent路径的信息进行写入:
获取之后还是写入到wcl.docx文档中:

最后这里可以看到,程序还会尝试获取C:/Program Files和 systeminfo的信息一并写入到wcl.docx中:
后面没内容了,说明00404250这个函数就是用于收集用户信息的,然后当这几个信息都收集完之后,程序会休眠1388h,也就是5秒,然后退出当前函数。

最后获取到的信息大概如下:
返回线程代码,可以看到4250这个函数调用完成之后,还有两个关键call:
并且最后这里可以看到,45C0这个函数调用之后,程序会进行一个长休眠,30分钟,然后继续循环调用sub_4045C0。

004049e0


49e0函数进来,首先会获取wcl.docx的文件长度,如果长度为0,则删除该文件。
然后清空一片edi这片内存,fread读取docx的内容过来:
如下:
接着经过一系列的处理,构造出一个请求信息:
通过sub_404DD0这个函数进行网络请求 。
   
这里可以清晰的看到,请求的地址是pingguo2.atwebpages[.]com。

请求的路径应该是:home/jpg/post.php
完整的请求如下:
然后尝试通过InternetOpen发起网络请求:
POST传输的完整信息如下:
所以49E0函数的功能比较明显,就是上传本地收集到的信息到服务器。

接下来看看线程中最后一个函数sub_4045C0。

004045C0


4E90是一个上传函数,那么4045C0就是一个下载函数。
这里进来就尝试访问download.php下载一个文件,参数为filename=button01。
请求的C2还是之前看到的pingguo2.atwebpages.com

程序首先会尝试通过InternetReadFile获取服务器的返回值,如果成功读取到,则通过je跳转到下面继续执行。
否则通过InternetCloseHandle关闭连接:
根据跳转下下来的代码可以知道,这里会从服务器读取数据并写入到tcf.bin文件中:
并且在最后可以看到LoadLibrary加载了tcf.bin:
由此可见,程序从服务器下载回来并写入到tcf. bin中的应该是一个dll文件。




0x03总结


关于这个KimSuky的样本到这里就分析完成,可以看到,这里其实是一个简单的downloader,样本运行后,会收集本地主机的一些信息并上传,循环的从服务器下载dll文件到本地通过LoadLibrary加载执行。

目前服务器下载链接已经是403,应该是攻击者看到样本暴露,然后关闭了后续样本的下载通道。

附件解压密码为 infected。

* 附件点击“阅读原文”下载。



- End -



看雪ID:顾何

https://bbs.pediy.com/user-home-757351.htm

  *本文由看雪论坛 顾何 原创,转载请注明来自看雪社区。



另外,贴心提示本次再印刷还没购买0day安全正书籍的小伙伴抓紧时间啦!


目前已热销满500本,可以安排啦!

点击以下小程序即可预购!

推荐文章++++

* IO-FILE中的stdin介绍

* 反汇编代码还原之除数为2的幂

* 用麒麟框架深入分析实模式二进制文件

* 反汇编代码还原之加减乘

* 基于inlinehook免重打包实现持久化NativeHook







公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



求分享

求点赞

求在看


“阅读原文”一起来充电吧!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存